package com.example.smart_city_0829.retrofit;

import com.example.smart_city_0829.entity.Base;
import com.example.smart_city_0829.entity.YouthInn.InnDetail;
import com.example.smart_city_0829.entity.YouthInn.InnList;
import com.example.smart_city_0829.entity.YouthInn.PolicyDetail;
import com.example.smart_city_0829.entity.YouthInn.PolicyList;
import com.example.smart_city_0829.entity.YouthInn.TalentPolicyArea;
import com.example.smart_city_0829.entity.YouthInn.TalentPolicyAreaList;
import com.example.smart_city_0829.entity.banner.HomeBannerList;
import com.example.smart_city_0829.entity.common.UploadResult;
import com.example.smart_city_0829.entity.commonweal.CommonwealActivityType;
import com.example.smart_city_0829.entity.commonweal.CommonwealBanner;
import com.example.smart_city_0829.entity.commonweal.CommonwealRecommendList;
import com.example.smart_city_0829.entity.digitalLibrary.Library;
import com.example.smart_city_0829.entity.digitalLibrary.LibraryComment;
import com.example.smart_city_0829.entity.digitalLibrary.LibraryList;
import com.example.smart_city_0829.entity.gov.GovAdvDetail;
import com.example.smart_city_0829.entity.gov.GovAdvList;
import com.example.smart_city_0829.entity.gov.GovBanner;
import com.example.smart_city_0829.entity.gov.GovType;
import com.example.smart_city_0829.entity.lawyer_onsultation.Comment;
import com.example.smart_city_0829.entity.lawyer_onsultation.Consultation;
import com.example.smart_city_0829.entity.lawyer_onsultation.Lawyer;
import com.example.smart_city_0829.entity.lawyer_onsultation.LawyerBanner;
import com.example.smart_city_0829.entity.lawyer_onsultation.LawyerList;
import com.example.smart_city_0829.entity.lawyer_onsultation.LawyerTop;
import com.example.smart_city_0829.entity.lawyer_onsultation.LegalExpertiseList;
import com.example.smart_city_0829.entity.logistics_inquiries.LogisticsBanner;
import com.example.smart_city_0829.entity.logistics_inquiries.LogisticsCompany;
import com.example.smart_city_0829.entity.logistics_inquiries.LogisticsCompanyDetail;
import com.example.smart_city_0829.entity.news.NewsList;
import com.example.smart_city_0829.entity.news.NewsType;
import com.example.smart_city_0829.entity.petHos.InquiryMessageList;
import com.example.smart_city_0829.entity.petHos.PetDoc;
import com.example.smart_city_0829.entity.petHos.PetType;
import com.example.smart_city_0829.entity.petHos.PubInquiryList;
import com.example.smart_city_0829.entity.server.ServerList;
import com.example.smart_city_0829.entity.user.Login;
import com.example.smart_city_0829.entity.user.User;
import com.example.smart_city_0829.entity.volunteering.VolunteeringList;
import com.example.smart_city_0829.entity.volunteering.VolunteeringNews;
import com.example.smart_city_0829.entity.volunteering.VolunteertingBanner;
import com.example.smart_city_0829.entity.waimai.CaiPing;
import com.example.smart_city_0829.entity.waimai.OrderDetail;
import com.example.smart_city_0829.entity.waimai.OrderList;
import com.example.smart_city_0829.entity.waste_sorting.Banner;
import com.example.smart_city_0829.entity.waste_sorting.HotKeyWord;
import com.example.smart_city_0829.entity.waste_sorting.News;
import com.example.smart_city_0829.entity.waste_sorting.NewsDetails;
import com.example.smart_city_0829.entity.waste_sorting.PostIm;
import com.example.smart_city_0829.entity.waste_sorting.Sort;
import com.example.smart_city_0829.utils.Constant;

import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

public interface Api {

    @GET("/prod-api/api/rotation/list?type=2")
    Call<HomeBannerList> getHomeBanner();

    @GET("/prod-api/api/service/list")
    Call<ServerList> getServerList();

    @GET("/prod-api/press/category/list")
    Call<NewsType> getNewsType();

    @GET("/prod-api/press/press/list")
    Call<NewsList> getNews(@QueryMap Map<String, Object> params);

    @POST("/prod-api/api/register")
    Call<Base> register(@Body RequestBody body);

    @POST("/prod-api/api/login")
    Call<Login> login(@Body RequestBody requestBody);

    @GET("/prod-api/api/common/user/getInfo")
    Call<User> getUserInfo();

    @Multipart
    @POST("/prod-api/common/upload")
    Call<UploadResult> postFile(@Part() MultipartBody.Part file);

    @GET("/prod-api/api/digital-library/library/list")
    Call<LibraryList> getDigitLibraryList(@Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    @GET("/prod-api/api/digital-library/library/{id}")
    Call<Library> getLibraryDetail(@Path("id") int id);

    @GET("/prod-api/api/digital-library/library-comment/list")
    Call<LibraryComment> getLibraryComment(@Query("libraryId") int libraryId, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    @POST("/prod-api/api/digital-library/library-comment")
    Call<Base> sendLibraryComment(@Body RequestBody body);

    @GET("/prod-api/api/youth-inn/talent-policy-area/list")
    Call<TalentPolicyAreaList> getTalentPolicyArea();

    @GET("/prod-api/api/youth-inn/youth-inn/list")
    Call<InnList> getInnList();

    @GET(" /prod-api/api/youth-inn/youth-inn/{id}")
    Call<InnDetail> getInnDetail(@Path("id") int id);

    @GET("/prod-api/api/youth-inn/talent-policy-area/{id}")
    Call<TalentPolicyArea> getTalentAreaOfId(@Path("id") int id);

    @GET("/prod-api/api/youth-inn/talent-policy/list")
    Call<PolicyList> getPolicyOfAreaId(@Query("areaId") int areaId, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    @GET("/prod-api/api/youth-inn/talent-policy/list")
    Call<PolicyList> getPolicyOfAreaId(@Query("areaId") int areaId);

    @GET("/prod-api/api/youth-inn/talent-policy/{id}")
    Call<PolicyDetail> getPolicyDetail(@Path("id") int id);

    //公益爱心
    //广告轮播图
    @GET("/prod-api/api/public-welfare/ad-banner/list")
    Call<CommonwealBanner> getWelfareBannerList();

    //活动分类
    @GET("/prod-api/api/public-welfare/public-welfare-type/list")
    Call<CommonwealActivityType> getWelfareActivityType();

    //活动推荐列表
    @GET("/prod-api/api/public-welfare/public-welfare-activity/recommend-list")
    Call<CommonwealRecommendList> getWelfareRecommendList();

    //根据公益分类获取公益列表
    @GET("/prod-api/api/public-welfare/public-welfare-activity/list")
    Call<CommonwealRecommendList> getWelfareListOfType(@Query("typeId") int typeId);

    //根据名称查询公益列表
    @GET("/prod-api/api/public-welfare/public-welfare-activity/list")
    Call<CommonwealRecommendList> getWelfareListOfName(@Query("name") String name);

    //查询公益列表
    @GET("/prod-api/api/public-welfare/public-welfare-activity/list")
    Call<CommonwealRecommendList> getWelfareList(@Query("pageSize") int pageSize, @Query("pageNum") int pageNum);

    //公益捐赠
    @POST("/prod-api/api/public-welfare/donate-record")
    Call<Base> commonwealDonateFor(@Body RequestBody requestBody);


    //政府热线轮播数据
    @GET("/prod-api/api/gov-service-hotline/ad-banner/list")
    Call<GovBanner> governmentMainBannerData();

    //政府热线诉求分类
    @GET("/prod-api/api/gov-service-hotline/appeal-category/list")
    Call<GovType> getGovAdvType();

    //分类查询诉求
    @GET("/prod-api/api/gov-service-hotline/appeal/list")
    Call<GovAdvList> getGovAdvListOfType(@Query("appealCategoryId") int appealCategoryId, @Query("pageSize") int pageSize, @Query("pageNum") int pageNum);

    //提交诉求
    @POST("/prod-api/api/gov-service-hotline/appeal")
    Call<Base> postGovAdv(@Body RequestBody body);

    //分页查询我提交的所有诉求
    @GET("/prod-api/api/gov-service-hotline/appeal/my-list")
    Call<GovAdvList> getGovMyAdvList(@Query("pageSize") int pageSize, @Query("pageNum") int pageNum);

    //查询诉求详情
    @GET("/prod-api/api/gov-service-hotline/appeal/{id}")
    Call<GovAdvDetail> getAdvDetail(@Path("id") int id);


    @GET("/prod-api/api/garbage-classification/ad-banner/list")
    Call<Banner> getGarbageBannerData();

    //查询垃圾分类新闻分类数据
    @GET("/prod-api/api/garbage-classification/news-type/list")
    Call<com.example.smart_city_0829.entity.waste_sorting.NewsType> getGarbageNewsType();

    //查询垃圾分类模块下分类新闻
    @GET("/prod-api/api/garbage-classification/news/list")
    Call<News> getGarbageNewsOfType(@Query("type") int type);

    //查询垃圾分类新闻
    @GET("/prod-api/api/garbage-classification/news/list")
    Call<News> getGarbageNews();

    //获取垃圾分类模块新闻详情
    @GET("/prod-api/api/garbage-classification/news/{id}")
    Call<NewsDetails> getGarbageNewsDetail(@Path("id") int id);

    //垃圾分类模块下发表新闻评论
    @POST("/prod-api/api/garbage-classification/news-comment")
    Call<Base> sendGarbageNewsCommend(@Body RequestBody body);

    //垃圾分类模块下宣传海报
    @GET("/prod-api/api/garbage-classification/poster/list")
    Call<PostIm> getGarbagePoster();

    //垃圾分类模块下垃圾分类热词
    @GET("/prod-api/api/garbage-classification/garbage-classification/hot/list")
    Call<HotKeyWord> getGarbageHotKeyWord();

    //垃圾分类模块下垃圾分类列表
    @GET("/prod-api/api/garbage-classification/garbage-classification/list")
    Call<Sort> getGarbageSort(@Query("name") String name);

    //宠物医院模块下获取宠物分类
    @GET("/prod-api/api/pet-hospital/pet-type/list")
    Call<PetType> getPetType();

    //宠物医院模块下获取自己的宠物问诊历史列表 TODO
    @GET("/prod-api/api/pet-hospital/inquiry/my-list")
    Call<PubInquiryList> getMyPetInguiryHistory(@Query("pageSize") int pageSize, @Query("pageNum") int pageNum);

    //宠物医院下获取所有公开的问诊列表
    @GET("/prod-api/api/pet-hospital/inquiry/list")
    Call<PubInquiryList> getAllPubInquiryList(@Query("pageSize") int pageSize, @Query("pageNum") int pageNum);

    //宠物医院下获取医生列表
    @GET("/prod-api/api/pet-hospital/pet-doctor/list")
    Call<PetDoc> getDoctorList(@Query("pageSize") int pageSize, @Query("pageNum") int pageNum);

    //宠物医院下提交问诊问题
    @POST("/prod-api/api/pet-hospital/inquiry")
    Call<Base> postInquiryQuery(@Body RequestBody body);

    //查询问诊聊天记录
    @GET("/prod-api/api/pet-hospital/inquiry-message/list")
    Call<InquiryMessageList> getInquiryMessageList(@Query("inquiryId") int inquiryId);

    //追问聊天
    @POST("/prod-api/api/pet-hospital/inquiry-message")
    Call<Base> postInquiryMessage(@Body RequestBody body);


    //法律咨询下轮播图
    @GET("/prod-api/api/lawyer-consultation/ad-banner/list")
    Call<LawyerBanner> getLawyerMainBanner();

    //法律咨询下搜索律师、获取分类下律师、根据法律专长查询律师
    @GET("/prod-api/api/lawyer-consultation/lawyer/list")
    Call<LawyerList> getLawyerList(@Query("pageSize") Integer pageSize, @Query("pageNum") Integer pageNum, @Query("legalExpertiseId") Integer legalExpertiseId, @Query("name") String name, @Query("sort") String sort);

    //获取律师评价
    @GET("/prod-api/api/lawyer-consultation/lawyer/list-evaluate")
    Call<Comment> getLawyerComment(@Query("lawyerId")int lawyerId);

    //获取前10律师
    @GET("/prod-api/api/lawyer-consultation/lawyer/list-top10")
    Call<LawyerTop> getTopLawyer(@Query("pageSize") Integer pageSize, @Query("pageNum") Integer pageNum);

    //获取专长列表
    @GET("/prod-api/api/lawyer-consultation/legal-expertise/list")
    Call<LegalExpertiseList> getLegalExpertiseList();

    //提交法律咨询
    @POST("/prod-api/api/lawyer-consultation/legal-advice")
    Call<Base> postConsultation(@Body RequestBody body);

    //获取用户的法律咨询
    @GET("/prod-api/api/lawyer-consultation/legal-advice/list")
    Call<Consultation> getMyConsultation(@Query("pageSize") Integer pageSize, @Query("pageNum") Integer pageNum);

    //获取律师信息
    @GET("/prod-api/api/lawyer-consultation/lawyer/{id}")
    Call<Lawyer> getLawyer(@Path("id")int id);

    //对某条已完成的咨询进行评价
    @POST("/prod-api/api/lawyer-consultation/legal-advice/evaluate")
    Call<Base> postLawyerEvaluate(@Body RequestBody requestBody);


    //志愿活动下轮播图
    @GET("/prod-api/api/volunteer-service/ad-banner/list")
    Call<VolunteertingBanner> getVolunteeringMianBanner();

    //志愿活动下新闻列表 total:12
    @GET("/prod-api/api/volunteer-service/news/list")
    Call<VolunteeringNews> getVolunteeringNews(@Query("pageSize") Integer pageSize, @Query("pageNum") Integer pageNum);

    //志愿活动下获取获取活动列表 total:50
    @GET("/prod-api/api/volunteer-service/activity/list")
    Call<VolunteeringList> getVolunteeringList(@Query("pageSize") Integer pageSize, @Query("pageNum") Integer pageNum);

    //志愿活动下获取活动详细信息
    @GET("/prod-api/api/volunteer-service/activity/{id}")
    Call<VolunteeringList> getVolunteeringDetail(@Path("id")int activityId);

    //志愿活动下报名活动或取消报名
    @POST("/prod-api/api/volunteer-service/register")
    Call<Base> postVolunteeringActivity(@Body RequestBody body);

    //志愿活动下获取用户的所有活动 已报名0 已完成1 已取消2
    @GET("/prod-api/api/volunteer-service/activity/my-list/{state}")
    Call<?> getUserVolunteeringActivity(@Path("state")int state);



    //物流查询下轮播图
    @GET("/prod-api/api/logistics-inquiry/ad-banner/list")
    Call<LogisticsBanner> getLogisticsBannerData();

    //物流查询下所有物流公司
    @GET("/prod-api/api/logistics-inquiry/logistics_company/list")
    Call<LogisticsCompany> getLogisticsCompany();

    //查询物流公司详情
    @GET("/prod-api/api/logistics-inquiry/logistics_company/{id}")
    Call<LogisticsCompanyDetail> getLogisticsCompanyDetail(@Path("id")int id);

    //根据快递单号查询快递数据
    @GET("/prod-api/api/logistics-inquiry/logistics_info/{no}")
    Call<?> getLogisticsPackageInfo(@Path("no") String no);



    //查询店家列表
    @GET("/prod-api/api/takeout/seller/list")
    Call<OrderList> getOrderList(@Query("name")String name,@Query("themeId")Integer themeId);

    @GET("/prod-api/api/takeout/search")
    Call<CaiPing> getCaiPing(@Query("keyword")String keyword);

    @GET("/prod-api/api/takeout/seller/{id}")
    Call<OrderDetail> getOrderDetail(@Path("id")Integer id);





}